﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
     public class FuncionarioPermissaoRepositorioADO
    {
         private Contexto contexto;

         public void Inserir(string permissao, string login)
         {
             var strQuery = "";
             strQuery += "insert into FuncionarioPermissoes (Permissao, Login)";

             strQuery += string.Format("values('{0}','{1}') ", permissao, login);

             using (contexto = new Contexto())
             {
                 contexto.ExecutaComando(strQuery);
             }
         }

         public void Excluir(string listaId, string login)
         {
             using (contexto = new Contexto())
             {
                 var strQuery = string.Format(" DELETE FROM FuncionarioPermissoes WHERE Permissao in ({0}) and Login='{1}'", listaId, login);
                 contexto.ExecutaComando(strQuery);
             }
         }
       
        public IEnumerable<FuncionarioPermissao> ListarFuncionarioPermissao( string login)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Permissao Id, Descricao Permissao,Login FROM FuncionarioPermissoes fp inner join Permissoes p on fp.Permissao=p.Id" +
                    " where Login ='{0}' order by Descricao", login);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }
        public IEnumerable<FuncionarioPermissao> ListarFuncionarioPermissaoExcluir(string permissao)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Id, Descricao Permissao from Permissoes where Id in ({0})order by Descricao", permissao);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto2(retornoDataReader);
            }
        }
        public IEnumerable<FuncionarioPermissao> ListarFuncionarioPermissaoDisponivel(string login)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Id , Descricao Permissao FROM Permissoes where Id not in" +
                    " (select Permissao from FuncionarioPermissoes where Login ='{0}') order by Descricao", login);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto2(retornoDataReader);
            }
        }

        private List<FuncionarioPermissao> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var funcionarioPermissao = new List<FuncionarioPermissao>();
            while (reader.Read())
            {
                var TemObjeto = new FuncionarioPermissao()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Permissao = reader["Permissao"].ToString(),
                    Login = reader["Login"].ToString(),
                 };
                funcionarioPermissao.Add(TemObjeto);
            }
            reader.Close();
            return funcionarioPermissao;
        }
        private List<FuncionarioPermissao> TransformaReaderEmListaDeObjeto2(SqlDataReader reader)
        {

            var funcionarioPermissao = new List<FuncionarioPermissao>();
            while (reader.Read())
            {
                var TemObjeto = new FuncionarioPermissao()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Permissao = reader["Permissao"].ToString(),
                };
                funcionarioPermissao.Add(TemObjeto);
            }
            reader.Close();
            return funcionarioPermissao;
        }
    }
}

 